<template>
  <div>
    <input ref="myInp" type="text" placeholder="这是一个输入框" v-if="isShow" />
    <button v-else @click="btn">点击我进行搜索</button>
  </div>
</template>

<script>
// 目标: 点按钮(消失) - 输入框出现并聚焦
// 1. 获取到输入框
// 2. 输入框调用事件方法focus()达到聚焦行为
export default {
  data() {
    return {
      isShow: false,
    };
  },
  methods: {
    async btn() {
      this.isShow = true;
      // this.$refs.myInp.focus()
      // 原因: data变化更新DOM是异步的
      // 输入框还没有挂载到真实DOM上
      // 解决:
      // this.$nextTick(() => {
      //     this.$refs.myInp.focus()
      // })
      // 扩展: await取代回调函数
      // $nextTick()原地返回Promise对象
      await this.$nextTick();
      this.$refs.myInp.focus();
    },
  },
};
</script>